package com.pn.service.impl;

import com.pn.entity.Result;
import com.pn.entity.Store;
import com.pn.entity.vo.StoreCountVo;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

import com.pn.mapper.StoreMapper;
import com.pn.page.Page;
import com.pn.service.StoreService;

import java.util.List;

@CacheConfig(cacheNames = "com.pn.service.impl.StoreServiceImpl")
@Service
public class StoreServiceImpl implements StoreService {

    @Resource
    private StoreMapper storeMapper;

    @Cacheable(key = "'all:store'")
    @Override
    public List<Store> queryAllStore() {
        return storeMapper.findAllStore();
    }

    @Override
    public List<StoreCountVo> queryStoreCount() {
        return storeMapper.findStoreCount();
    }

    @Override
    public Page queryStorePage(Page page, Store store) {

        // 查询仓库总行数
        int count = storeMapper.selectStoreCount(store);

        // 查询仓库集合
        List<Store> storeList = storeMapper.selectStorePage(page, store);

        // 往Page对象封装总条数和仓库集合
        page.setTotalNum(count);
        page.setResultList(storeList);

        return page;
    }

    @CacheEvict(key = "'all:store'")
    @Override
    public Result saveStore(Store store) {

        int i = storeMapper.insertStore(store);

        if (i > 0) {
            return Result.ok("仓库添加成功！");
        }

        return Result.err(Result.CODE_ERR_BUSINESS, "仓库添加失败！");

    }

    @CacheEvict(key = "'all:store'")
    @Override
    public Result setStoreById(Store store) {

        int i = storeMapper.updateStoreById(store);

        if (i > 0) {
            return Result.ok("仓库修改成功！");
        }

        return Result.err(Result.CODE_ERR_BUSINESS, "仓库修改失败！");
    }

    @CacheEvict(key = "'all:store'")
    @Override
    public Result removeStore(Integer storeId) {

        int i = storeMapper.deleteStoreById(storeId);

        if (i > 0) {
            return Result.ok("删除仓库成功！");
        }

        return Result.err(Result.CODE_ERR_BUSINESS, "删除仓库失败！");
    }

    @Override
    public Result checkStoreNum(String storeNum) {
        return Result.ok(storeMapper.selectStoreByNum(storeNum) == null);
    }
}
